﻿using System;
using System.Collections.Generic;
using ServicioRFIDMovil.Datos;
using ServicioRFIDMovil.Entidad;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Web;
using System.Web.Services;
using System.Configuration;
using LH.Utilitario;
using LH.Configuration;
using LH.Library;
using log4net;
using ServicioRFIDMovil.Herramientas;

namespace ServicioRFIDMovil
{
    /// <summary>
    /// Descripción breve de Servicio
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
    // [System.Web.Script.Services.ScriptService]
    public class Servicio : System.Web.Services.WebService
    {
        #region --- Variables y Constantes ---
        private static readonly ILog log = LogManager.GetLogger(typeof(Servicio));

        //private static string llave = ConfigurationSettings.AppSettings["SEMILLA"];
        
        #endregion

        #region --- Metodos Propios ---

        //LOGUEO
        [WebMethod]
        public ListaAlmacen listarAlmacen()
        {
            ListaAlmacen listaAlmacen = null;

            try
            {
                //listaAlmacen = new ListaAlmacen();
                //listaAlmacen.Add(new Almacen { codigo = 1, descripcion = "Almacen" });
                listaAlmacen = new AlmacenDA().listarAlmacen();
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaAlmacen;
        }

        [WebMethod]
        public int validarUsuario(Usuario usuario)
        {
            int Retorno = 0;

            try
            {
                //Recibe el objeto usuario
                Usuario usuarioValidar = new Seguridad().Existe(usuario);
                //se envia a la función que encripta el password
                Retorno = new UsuarioDA().validarUsuario(usuarioValidar);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return Retorno;
        }

        //REGISTRO
        [WebMethod]
        public ListaBien buscarBienEtiqueta(Etiqueta etiqueta)
        {
            ListaBien listaBien = null;

            try
            {
                /*
                listaBien = new ListaBien();

                Bien bien = new Bien();
                bien.idBien = etiqueta.bien.id;
                bien.codBarra = etiqueta.bien.codBarra;
                bien.descripcion = etiqueta.bien.descripcion;
                bien.habilitado = etiqueta.bien.habilitado;
                bien.codBienEstado = etiqueta.bien.codBienEstado;
                bien.codBienPrestamo = etiqueta.bien.codBienPrestamo;
                bien.codBienSituacion = etiqueta.bien.codBienSituacion;

                bien.listaEtiqueta = new ListaEtiqueta();
                bien.listaEtiqueta.Add(new Etiqueta { epc = "112233" , habilitado = 1});
                bien.listaEtiqueta.Add(new Etiqueta { epc = "113344", habilitado = 1 });

                listaExpediente.Add(expediente);
                */
                listaBien = new BienDA().buscarBienEtiqueta(etiqueta);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaBien;
        }


        [WebMethod]
        public bool registrarBienEtiqueta(Etiqueta etiqueta)
        {
            bool resultado = false;

            try
            {
                resultado = new EtiquetaDA().registrarBienEtiqueta(etiqueta);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }

        [WebMethod]
        public bool modificarBienEtiqueta(Etiqueta etiqueta)
        {
            bool resultado = false;

            try
            {
                resultado = new EtiquetaDA().modificarBienEtiqueta(etiqueta);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }

        //SALIDA


        [WebMethod]
        public ListaUsuario listarUsuarioSolicitante() 
        {
            ListaUsuario listaUsuarioSolicitante = null;

            try
            {
                //listaUsuario = new ListaUsuario();
                //listaUsuario.Add(new Usuario { idUsuario = 1, nombre = "Jose Carmona" });
                //listaUsuario.Add(new Usuario { idUsuario = 2, nombre = "Hansel Ramos" });
                listaUsuarioSolicitante = new UsuarioDA().listarUsuarioSolicitante();
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaUsuarioSolicitante;
        }
        
        [WebMethod]
        public ListaSolicitud listarSolicitudUsuarioSalida(Usuario usuario)
        {
            ListaSolicitud listaSolicitudUsuarioSalida = null;

            try
            {
                listaSolicitudUsuarioSalida = new SolicitudDA().listarSolicitudUsuarioSalida(usuario);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaSolicitudUsuarioSalida;
        }

        [WebMethod]
        public ListaDetalleBienSolicitud obtenerSolicitudSalida(Solicitud solicitud)
        {
            ListaDetalleBienSolicitud listaDetalleSolicitudSalida = null;

            try
            {
                listaDetalleSolicitudSalida = new DetalleBienSolicitudDA().obtenerSolicitudSalida(solicitud);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaDetalleSolicitudSalida;
        }

        //INGRESO:
        [WebMethod]
        public ListaSolicitud listarSolicitudUsuarioEntrada(Usuario usuario)
        {
            ListaSolicitud listaSolicitudUsuarioEntrada = null;

            try
            {
                listaSolicitudUsuarioEntrada = new SolicitudDA().listarSolicitudUsuarioEntrada(usuario);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaSolicitudUsuarioEntrada;
        }
        
        [WebMethod]
        public ListaDetalleBienSolicitud obtenerSolicitudEntrada(Solicitud solicitud)
        {
            ListaDetalleBienSolicitud listaDetalleSolicitudEntrada = null;

            try
            {
                listaDetalleSolicitudEntrada = new DetalleBienSolicitudDA().obtenerSolicitudEntrada(solicitud);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaDetalleSolicitudEntrada;
        }

        //MOVIMIENTO
        [WebMethod]
        public int registrarMovimiento(ListaDetalleBienMovimiento listaDetalleBienMovimiento, Movimiento movimiento)
        {
            int resultado = 0;

            try
            {
                //resultado = true;

                resultado = new MovimientoDA().registrarMovimiento(listaDetalleBienMovimiento, movimiento);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }

        [WebMethod]
        public bool actualizarEstadoSolicitud(Solicitud solicitud)
        {
            bool resultado = false;

            try
            {
                resultado = new SolicitudDA().actualizarEstadoSolicitud(solicitud);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }


        //INCIDENCIA
        [WebMethod]
        public ListaIncidenciaTipo listarIncidenciaTipo()
        {
            ListaIncidenciaTipo listaIncidenciaTipo = null;

            try
            {
         
                listaIncidenciaTipo = new IncidenciaDA().listarIncidenciaTipo();
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return listaIncidenciaTipo;
        }

        [WebMethod]
        public bool registrarIncidencia(Incidencia incidencia)
        {
            bool resultado = false;

            try
            {
                resultado = new IncidenciaDA().registrarIncidencia(incidencia);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }


        [WebMethod]
        public bool actualizarBien(Bien bien)
        {
            bool resultado = false;

            try
            {
                resultado = new BienDA().actualizarBien(bien);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw (ex);
            }

            return resultado;
        }

       
        #endregion
    }
}